package com.ruanxie.service;

import com.ruanxie.dto.student.StudentGetCourseGradeDTO;
import com.ruanxie.dto.student.StudentHuebImportDTO;
import com.ruanxie.entity.*;
import com.ruanxie.json.jsonconverter.HuebStudentJsonConverter;
import com.ruanxie.json.jsonconverter.HuebTeachingPlanInfoJsonConverter;
import com.ruanxie.result.PageResult;
import com.ruanxie.vo.student.MajorTeachingPlanInfoVO;
import com.ruanxie.vo.student.StudentGetCourseScheduleOfStudentVO;

import java.io.IOException;

public interface StudentService {

    /**
     * 获取到河北经贸大学的验证码
     * @return
     */
    String getHuebCaptcha();

    /**
     * 获取到河北经贸大学当前登录的cookie
     * @return
     */
    String getHuebCookie(StudentHuebImportDTO studentHuebImportDTO);


    /**
     * 通过cookie，发起各种网络请求，获取到官网中的各种数据
     * @param huebCookie
     */
    void huebImportAllData(String huebCookie) throws IOException;

    /**
     * 导入学生基本信息
     *
     * @param huebCookie
     * @return : 返回学生的基本信息，后面查询会用到一些
     */
    HuebStudentJsonConverter huebImportStudentData(String huebCookie) throws IOException;

    /**
     * 导入学生的教学执行计划专业的信息
     * @param huebCookie
     * @param yearOfEntry
     * @param majorId
     * @return
     */
    HuebTeachingPlanInfoJsonConverter huebImportTeachingPlanInfoData(String huebCookie,String yearOfEntry,String majorId) throws IOException;


    /**
     * 导入专业的教学执行计划所有的课程信息和计划(必修+选修)
     *
     * @param huebCookie
     * @param teachingPlanInfoId
     */
    void huebImportAllMajorCourceAndPlan(String huebCookie, String teachingPlanInfoId) throws IOException;


    /**
     * 导入专业的教学执行计划的所有信息
     * (huebImportTeachingPlanInfoData和huebImportAllMajorCourceAndPlan和在一起，
     *  并使用业务来维护，把传播行为属性定义为总是新建（避免事务间相互影响），进一步避免重复导入)
     * @param huebCookie
     * @param yearOfEntry
     * @param majorId
     * @throws IOException
     */
    void huebImportMajorAllTeachingPlan(String huebCookie,String yearOfEntry,String majorId) throws IOException;


    /**
     * 导入学生当前学年当前学期对应的课表
     * @param huebCookie
     */
    void huebImportCourseScheduleOfStudent(String huebCookie) throws IOException;


    /**
     * 导入学生当前的成绩信息
     * @param huebCookie
     */
    void huebImportCourseGradeOfStudent(String huebCookie,String schoolYear, String term) throws IOException;

    /**
     * 插入课程信息
     * @param course
     */
    void save(Course course);

    /**
     * 插入学生信息
     * @param student
     */
    void save(Student student);

    /**
     * 插入教学执行计划课程信息
     * @param teachingPlanCourseInfo
     */
    void save(TeachingPlanCourseInfo teachingPlanCourseInfo);

    /**
     * 插入教学执行计划信息
     * @param teachingPlanInfo
     */
    void save(TeachingPlanInfo teachingPlanInfo);

    /**
     * 导入学生课程信息测试
     * @param CourseSchedule
     * @return
     */
    void save(String studentId,String CourseSchedule);

//    /**
//     * json数据存取测试
//     * @param jsonString
//     */
//    void save(String jsonString);

    /**
     * 查询学生课程信息测试
     * @return
     */
    CourseScheduleOfStudent selectCourseScheduleOfStudent();

    /**
     * 查询专业教学执行计划
     * @return
     */
    MajorTeachingPlanInfoVO getMajorTeachingPlanInfo();

    /**
     * 查询当前学年当前学期的学生课表
     * @return
     */
    StudentGetCourseScheduleOfStudentVO getStudentGetCourseScheduleOfStudentVO();

    /**
     * 查询课程成绩
     * @param studentGetCourseGradeDTO
     * @return
     */
    PageResult getCourseGrade(StudentGetCourseGradeDTO studentGetCourseGradeDTO);
}
